맨위로가기

단일 곱셈-누산기

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

단일 곱셈-누산기(FMA, fused multiply-add)는 부동 소수점 곱셈과 덧셈 연산을 한 번의 반올림으로 수행하는 연산이다. IEEE 754-2008 표준에서 권장하며, 곱셈과 덧셈을 개별적으로 수행하는 것보다 더 정확한 결과를 제공한다. FMA는 내적, 행렬 곱셈, 다항식 평가 등 다양한 계산에 활용되며, CPU, GPU, DSP 등 다양한 하드웨어에서 지원된다. C 프로그래밍 언어는 fma() 함수를 통해 FMA 연산을 지원한다.

더 읽어볼만한 페이지

  • 컴퓨터 산술 - IEEE 754
    IEEE 754는 부동소수점 숫자를 표현하고 처리하기 위한 국제 표준으로, 다양한 형식과 연산, 반올림 규칙, 예외 처리 등을 정의한다.
  • 컴퓨터 산술 - 1의 보수
    1의 보수는 이진수에서 양수는 일반적인 이진수로, 음수는 양수의 각 비트를 반전시켜 표현하며, 덧셈 시 자리올림수가 발생하면 결과값에 더해야 하고, 0을 중복 표현하는 단점으로 현대에는 2의 보수가 주로 사용된다.
  • 디지털 신호 처리 - 라플라스 변환
    라플라스 변환은 함수 f(t)를 복소수 s를 사용하여 적분을 통해 다른 함수 F(s)로 변환하는 적분 변환이며, 선형성을 가지고 미분방정식 풀이 등 공학 분야에서 널리 사용된다.
  • 디지털 신호 처리 - 디랙 델타 함수
    디랙 델타 함수는 원점에서 무한대 값을 갖고 그 외 지점에서 0의 값을 갖는 수학적 개념으로, 분포 또는 측도로 정의되며, 순간적인 충격이나 점 형태 현상 모델링에 활용되고 푸리에 변환, 스케일링, 평행 이동 등의 성질을 가진다.
단일 곱셈-누산기
연산 개요
종류곱셈-누산
분야디지털 신호 처리
약칭MAC
활용디지털 필터링
신경망
푸리에 변환
내적 계산
정의
수식a ← a + (b × c)
설명'곱셈 결과(b × c)를 누산기 변수 a에 더하여 갱신하는 연산이다.'
특징
정확도 향상중간 계산 결과의 정밀도를 유지하여 최종 결과의 정확도를 높임.
성능 향상곱셈과 덧셈을 하나의 단계로 결합하여 처리 속도를 향상시킴.
FMA (Fused Multiply-Add)일부 프로세서에서 지원하는 기능으로, 반올림 오차를 줄여 더 정확한 결과를 얻을 수 있다.
응용 분야디지털 신호 처리 (DSP)
그래픽 처리 (GPU)
머신 러닝 (신경망)
하드웨어 구현
곱셈-누산 장치 (MAC 유닛)곱셈과 덧셈을 동시에 수행하는 전용 하드웨어 회로.
구성 요소곱셈기
덧셈기
누산기 (결과 저장)
성능 지표처리량, 지연 시간, 전력 소비량
FMA (융합 곱셈-덧셈)
설명곱셈과 덧셈을 단일 연산으로 결합하여 중간 반올림 없이 최종 결과를 얻는 방식.
장점높은 정확도
빠른 연산 속도
향상된 성능

2. 부동소수점 연산과 FMA

부동 소수점 연산은 수학적 정밀도가 제한되어 있어, 일반적인 곱셈과 덧셈 연산을 각각 수행하면 반올림을 두 번 거치게 되고, 이로 인해 오차가 발생할 수 있다. IEEE 754-2008 표준[6]에서는 이러한 오차를 줄이기 위해 융합 곱셈-덧셈 (Fused Multiply-Add, FMA) 연산을 도입했다. FMA는 곱셈과 덧셈을 하나의 단계로 결합하여 한 번의 반올림만 수행하므로, 더 정확한 결과를 얻을 수 있다.

2. 1. FMA 연산의 정의

'''융합 곱셈-덧셈'''('''FMA''' 또는 '''fmadd''')[7]은 부동 소수점 곱셈-덧셈 연산을 한 번의 반올림만으로 수행하는 것이다. 즉, 일반적인 곱셈-덧셈 연산이 를 계산하고 결과를 ''N''개의 유효 비트로 반올림한 다음, 에 더하고 다시 ''N''개의 유효 비트로 반올림하는 반면, FMA는 전체 식 를 최종 결과를 ''N''개의 유효 비트로 반올림하기 전에 전체 정밀도로 계산한다.

FMA 연산은 IEEE 754 규격의 2008년 개정판(IEEE 754-2008)에서 표준화되었다.[23] FMA 명령어는 CPU에서는 HP의 PA-RISC, IBM의 메인프레임 컴퓨터 3090의 VF 확장, IBM의 Power 프로세서, 인텔의 Itanium 프로세서, 인텔 x86계 프로세서의 FMA 명령어 세트[24], ARM의 확장 명령어인 VFPv4와 NEONv2에서 구현되어 있다.[25][26] 또한, CPU나 DSP뿐만 아니라 GPU(NVIDIA제, AMD제, 인텔제 등)에서도 지원된다.[27][28][20][29]

곱셈-덧셈 연산을 두 번의 반올림 대신 FMA를 사용하여 한 번의 반올림으로 수행하면 더 정확한 결과를 얻을 수 있다.[6] 중간 곱셈 의 결과를 부동 소수점 수 값으로 반올림하지 않고 연산을 1 명령어로 수행함으로써 최종 결과의 오차를 줄일 수 있다.[23]

2. 2. FMA의 장점

FMA는 다음과 같은 여러 계산에서 속도와 정확도를 향상시킬 수 있다.[6]

융합 곱셈-덧셈(FMA)은 일반적으로 더 정확한 결과를 제공한다. 그러나 윌리엄 카한은 FMA를 무심코 사용하면 문제가 발생할 수 있다고 지적했다.[8]

FMA 명령어를 사용하면 나눗셈 (나눗셈 알고리즘 참조) 및 제곱근 (제곱근 계산 방법 참조) 연산의 효율적인 소프트웨어 구현을 가능하게 하여, 이러한 연산에 필요한 전용 하드웨어를 줄일 수 있다.[10]

2. 3. FMA 사용 시 주의점

윌리엄 카한은 융합 곱셈-덧셈(FMA)을 무심코 사용하면 문제가 발생할 수 있다고 지적했다.[8] x|x영어2 - y|y영어2가 ((''x'' × ''x'') - ''y'' × ''y'')로 계산되는 경우 (중복 괄호가 컴파일러에게 먼저 (''x'' × ''x'') 항을 반올림하도록 지시하는 카한의 제안된 표기법을 따름) FMA를 사용하면, 첫 번째 곱셈이 낮은 유효 비트를 버리기 때문에 x|x영어 = y|y영어일 때조차 결과가 음수가 될 수 있다. 예를 들어 결과의 제곱근을 계산하는 경우 오류가 발생할 수 있다.

3. FMA 지원 하드웨어 및 소프트웨어

FMA 연산은 IEEE 754-2008 표준에 포함되어 있다.

IBM POWER1 (1990) 프로세서에서 "곱셈-덧셈 융합"으로 처음 도입되었으며, 그 이후 많은 다른 프로세서에 추가되었다. 또한, 1999년 표준 C 프로그래밍 언어는 `fma()` 표준 수학 라이브러리 함수와 곱셈에 이은 덧셈의 자동 변환(부동 소수점 표현식 축약)을 통해 FMA 연산을 지원한다.

3. 1. FMA를 지원하는 프로세서

IBM POWER1 (1990) 프로세서에서 "곱셈-덧셈 융합"으로 처음 도입되었다.[7] 이후 다양한 프로세서에서 FMA를 지원한다.

제조사제품명연도
HPPA-80001996
히타치SuperH SH-41998
SCE-ToshibaEmotion Engine1999
인텔Itanium2001
STICell2006
FujitsuSPARC64 VI2007
(MIPS 호환)Loongson-2F2008[15]
Elbrus-8SV2018
AMDBulldozer (FMA4만)2011
AMDPiledriver (FMA3 및 FMA4)2012[16]
AMDSteamroller2014
AMDExcavator2015
AMDZen (FMA3만)2017
인텔Haswell (FMA3만)2013[17]
인텔Skylake (FMA3만)2015
ARM 프로세서ARM Cortex-M4F2010
STM32 Cortex-M33 (VFMA 연산)[18]
ARMARM Cortex-A52012
ARMARM Cortex-A72013
ARMARM Cortex-A152012
퀄컴Krait2012
애플Apple A62012
ARMv8모든 프로세서
FujitsuA64FX ("접두사 명령어를 사용한 4-피연산자 FMA")
IBMz/Architecture1998년 이후
AMD GPUTeraScale 2 "Evergreen"-시리즈 기반, Graphics Core Next 기반2009
Nvidia GPUFermi 기반, Kepler 기반, Maxwell 기반, Pascal 기반, Volta 기반2010
인텔Sandy Bridge 이후 GPU
인텔인텔 MIC2012
ARM MaliT600 시리즈 이상2012
NECSX-Aurora TSUBASA
RISC-V 명령어 집합2010


3. 2. FMA를 지원하는 프로그래밍 언어

1999 표준C 프로그래밍 언어는 `fma()` 표준 수학 라이브러리 함수와 곱셈에 이은 덧셈의 자동 변환(부동 소수점 표현식 축약)을 통해 FMA 연산을 지원하며, 이는 표준 프라그마를 사용하여 명시적으로 활성화하거나 비활성화할 수 있다. GCC 및 Clang C 컴파일러는 FMA 명령어를 지원하는 프로세서 아키텍처에 대해 기본적으로 이러한 변환을 수행한다. GCC는 앞서 언급한 프라그마를 지원하지 않으므로,[12] -ffp-contract 명령줄 옵션을 통해 전역적으로 제어할 수 있다.[13]

4. 추가 정보

(내용 없음)

4. 1. 내적 연산 (Dot product instruction)

내적은 FMA 연산을 통해 속도와 정확성을 향상시킬 수 있는 계산 중 하나이다.[7] 일부 기계는 여러 개의 융합 곱셈-덧셈 연산을 단일 단계로 결합하기도 한다. 예를 들어, 두 개의 128비트 SIMD 레지스터 `a0×b0 + a1×b1 + a2×b2 + a3×b3`에 대한 4-요소 내적을 단일 사이클 처리량으로 수행하는 경우가 있다.

참조

[1] 웹사이트 The Feasibility of Ludgate's Analytical Machine http://www.fano.co.u[...] 2020-08-30
[2] 논문 A Method of Increasing Digital Filter Performance Based on Truncated Multiply-Accumulate Units 2020-01
[3] 서적 2009 IEEE International Symposium on Parallel & Distributed Processing 2009-05
[4] 논문 PV-MAC: Multiply-and-accumulate unit structure exploiting precision variability in on-device convolutional neural networks https://www.scienced[...] 2020-03-01
[5] 웹사이트 mad - ps https://docs.microso[...] 2019-11-20
[6] 웹사이트 Precision & Performance: Floating Point and IEEE 754 Compliance for NVIDIA GPUs https://developer.nv[...] nvidia 2013-08-31
[7] 웹사이트 fmadd instrs https://www.ibm.com/[...]
[8] 웹사이트 IEEE Standard 754 for Binary Floating-Point Arithmetic http://www.cs.berkel[...] 1996-05-31
[9] 간행물 Floating-Point Fused Multiply–Add Architectures http://repositories.[...] 2007-05
[10] conference Software Division and Square Root Using Goldschmidt's Algorithms http://www.informati[...] 2004-11
[11] 웹사이트 VAX instruction of the week: POLY http://uranium.vaxpo[...]
[12] 웹사이트 Bug 20785 - Pragma STDC * (C99 FP) unimplemented https://gcc.gnu.org/[...] 2022-02-02
[13] 웹사이트 Optimize Options (Using the GNU Compiler Collection (GCC)) https://gcc.gnu.org/[...] 2022-02-02
[14] 논문 Design of the IBM RISC System/6000 floating-point execution unit 1990-01
[15] 웹사이트 Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation http://www.mdronline[...]
[16] 웹사이트 New "Bulldozer" and "Piledriver" Instructions https://developer.am[...] AMD Developer Central 2012-10
[17] 웹사이트 Intel adds 22nm octo-core 'Haswell' to CPU design roadmap http://www.reghardwa[...] 2008-08-19
[18] 웹사이트 STM32 Cortex-M33 MCUs programming manual https://www.st.com/r[...] 2024-05-06
[19] 뉴스 HaswellのGPUコア「Iris」はなぜ強力なのか - PC Watch https://pc.watch.imp[...]
[20] 뉴스 科学技術計算向け演算能力が引き上げられたGPUアーキテクチャ「Fermi」 (2) 科学技術計算向けのさまざまな工夫 | マイナビニュース https://news.mynavi.[...]
[21] 논문 イチから学ぶDSP基礎の基礎(2):専用プロセッサとしてのDSPの特徴 (1-3) https://ednjapan.com[...] 2012-06-29
[22] 문서 2013年のプロセッサのFLOPS値計算方法 - トータル・ディスクロージャ・サイト(事実をありのままに) http://topsecret.hpc[...]
[23] 뉴스 HPC性能が大幅に強化されたHaswell(前編) -各コアに256bit長のFMAを2個装備 | マイナビニュース https://news.mynavi.[...]
[24] 문서 "FMA (Fused Multiply-Add) は、インテル® AVX の別の拡張機能 ... インテル® AVX と FMA" https://www.xlsoft.c[...] Intel
[25] 문서 インテル® Advanced Vector Extensions (インテル® AVX) 組み込み関数と FMA (Fused Multiply-Add) 組み込み関数の詳細 https://www.xlsoft.c[...]
[26] 문서 FMA(Fused Multiply Add)コンパイラ組み込み関数 http://infocenter.ar[...]
[27] 뉴스 後藤弘茂のWeekly海外ニュース: GeForce GTX 280の倍精度浮動小数点演算 https://pc.watch.imp[...]
[28] 뉴스 4Gamer.net ― AMD,世界初のDX11 GPU「ATI Radeon HD 5800」を発表。HD 4800の大幅な進化形 https://www.4gamer.n[...]
[29] 뉴스 GTC 2014 - GPUの浮動小数点演算の精度:理論と実践(前編) | マイナビニュース https://news.mynavi.[...]
[30] 서적 http://domino.resear[...] 2011-01-15
[31] 문서 Godson-3 Emulates x86: New MIPS-Compatible Chinese Processor Has Extensions for x86 Translation http://www.mdronline[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com